לפני כמה ימים, שאלתי פה שאתה בקשר לשליפת קוד PHP מהמסד, והפעלתו בדף ה PHP שלנו,
פה לא ענו לי תשובה ואמרו שזה לא אפשרי להוציא קוד PHP מן המסד, ולהפעיל אותו.
פה אני יראה לכם את הדרך הנכונה לעשות זאת.
אז.. שלום לכולם!
לפני כמה ימים, שאלתי פה שאתה בקשר לשליפת קוד PHP מהמסד, והפעלתו בדף ה PHP שלנו,
פה לא ענו לי תשובה ואמרו שזה לא אפשרי להוציא קוד PHP מן המסד, ולהפעיל אותו.
פה אני יראה לכם את הדרך הנכונה לעשות זאת.
עכשיו אני יראה לכם דרך לעשות את הפעולה הזו בעזרת הפונקציה eval() !
נגיד ויש לנו במסד בתוך טבלה בשם "Test", ובתוכה יש עמודה בשם "PHP",
בתוך העמודה בשם "PHP" יש שורה, שבה כתוב את קוד ה PHP הזה:
echo '<font color="red">Welcom to SQL > PHP</font>';
אוקיי, אני מגיע לדף ה PHP שלי, ורוצה להפעיל את הקוד הזה מתוך המסד..
דבר ראשון אני נכנס לדף ה PHP שלי, נגיד וזה דף ה PHP שלי:
<?php
?>
?>
קודם כל נתחיל בדבר כזה,
נגיד ויש לי משתנה, ובתוכו קוד PHP, נגיד וזה המשתנה:
$phpcode = 'echo "Hello Worlds"';
הקוד של ה PHP שבו, עדיין לא מופעל באתר,
נגיד ואני רוצה להפעיל אותו באתר, אין אפשרות להשתמש ב echo או print בכדי להדפיס אותו,
גם אם נעשה ככה:
$phpcode = 'echo "Hello Worlds"';
echo $phpcode;
echo $phpcode;
זה לא יעבוד.
אז.. מה בעצם עושים בשביל שזה יעבוד לנו?
כמו שהדגשתי בהתחלה:
"בעזרת הפונקציה eval() !"
נשתמש בפונקציה הזו כדי לבצע את הפעולה,
איך משתמשים איתה?
זאת דרך פשוטה מאוד, כל מה שצריך לעשות זה ככה:
$phpcode = 'echo "Hello Worlds"';
eval($phpcode);
eval($phpcode);
כלומר, פה עשינו שהוא ידפיס לנו את $phpcode,
הפלט הוא:
Hello Worlds
אותו הדבר בשליפה מהמסד, שליפה מהמסד היא בצורה כזו:
$idss = mysql_query("SELECT * FROM Test");
if(mysql_num_rows($idss) > 0) {
while($row = mysql_fetch_assoc($idss)) {
$text = $row['body'];
}
}
$p .= eval($text);
if(mysql_num_rows($idss) > 0) {
while($row = mysql_fetch_assoc($idss)) {
$text = $row['body'];
}
}
$p .= eval($text);
כלומר הפלט שלנו בקוד הזה יהיה כזה:
Welcom to SQL > PHP
(זה יהיה הפלט לפי מה שדיברנו בהתחלה.....)
בהצלחה!
תגובות לכתבה:
באמת תודה על כך שאתה משתף פתרונות לבעיות שנתקלת בהן, אבל יש כאן כמה בעיות:
1. אם יהיה מאמר על הפונקציה eval, הוא יהיה עליה, ולא רק על שימוש בה בהקשר למסד נתונים, כי אין הבדל ביניהם.
2. הפתרון הזה הוא ממש לא טוב לבעיה (מה שהיא לא תהיה).
מלבד זאת, לדעתי, אני לא חושב שהפונקציה eval זקוקה למאמר, מכיוון שהשימוש שלה הוא יחיד ופשוט: להריץ מחרוזת כקוד PHP.
לפיכך, אני מניח שהמאמר לא יתפרסם...
נ.ב. אם תוכל אולי לפרט לנו למה בדיוק אתה חייב לאחזר מידע מהמסד ולהריץ אותו בתור קוד PHP - קרוב לוודאי שנוכל להציע פתרון טוב יותר.
לא משנה מה אתה בונה, שימוש בפונקציית eval זה גרוע ויכול להוות בעיית אבטחה
אני צריך את זה כדי לבנות מערכת ניהול תוכן ולהוציא קודי PHP שנשמרו בתוך המסד לתוך האתר..
*************** אם תוכל אולי לפרט לנו למה בדיוק אתה חייב לאחזר מידע מהמסד ולהריץ אותו בתור קוד PHP - קרוב לוודאי שנוכל להציע פתרון טוב יותר. ***************
LighTo273 אתה טועה..
לא "קרוב לוודאי" אלא 100% בטוח.
:)
נ.ב. קוראים לי אוראל. :)
עד עכשיו לא הומצאה סיבה טובה לשמור קוד PHP במסד.
המנהל של האתר המבוסס על המערכת שלך לא אמור להתעסק בלכתוב קוד שיכנס למסד, מכאן השקוד היחידי שאמור להיות למערכת שלך זה הקוד שהמפתח כתב.
קוד כזה לא אמור להיות מבסד נתונים.
מאוד ממליץ לעיין בנושא ה mvc
http://phpguide.co.il/mvc_מפרידים_html_מ_php.htm
" אני צריך את זה כדי לבנות מערכת ניהול תוכן ולהוציא קודי PHP שנשמרו בתוך המסד לתוך האתר.."
מערכת ניהול תוכן מנהלת את התוכן. לא את הקוד.
php צריכה להשמר בקבצים ולהיות מורצת ישירות ולא לאחר שליפה שלה מהמסד.
מה שאמור להיות במסד זה התוכן. שזה כולל מאמרים, מדריכים, שאלות, תשובות, פוסטים, html וכו'. לא php.
זה גרוע מאוד להשתמש בeval! אתה חשוף לפגיעה חמורה מאוד באתר שלך , כי כל אחד יוכל לכתוב קוד PHP לתוך האתר ! ...
עדיף לך לבצע עריכה של קובץ ולא להשתמש בזה עם מסד נתונים.
למה סיבכת תעניינים וחספת את האתר שלך לפגיע?
אתה יכול ליצור קובף בשם test.php(נניח),
אחרי זה כשאתה צריך אותו תעשה לו require_once: require_once(__DIR__.'/test.php);
(http://php.net/manual/en/function.require-once.php)
וכשאתה עורך תפתח את הקובץ של עם fopen(הרשאת w - write), תכתוב לשם עם fwrite, תסגור עם fclose.
עוד פרטים כאן: http://php.net/manual/en/ref.filesystem.php
לתת לערוך קובץ זה הצעה מטומטמת ביותר.
בעיית הבטחה היא לא עם זה שהקוד במסד. הבעיה היא עם זה שהמשתמשים עורכים קוד
ולא משנה איפה הוא נשמר.
אפשר להשתמש עם זה מתי שאתה רוצה להריץ כמה פעמים קוד שנמצא בקובץ php
במקום include שאפשר רק פעם אחת.
לידיעתם גם מערכת מגנטו משתמשת ב eval. והרבה.
היא לא היחידה והיא מסתמכת על זה שהמפתח או בעל האתר יכתבו קוד בעצמם במערכת ניהול תוכן שלהם.
אם בעל האתר עושה את זה, אין אם זה בעיה. אם המשתמשים של האתר עושים את זה, המצב על הפנים
@mat גם VB פועלת על EVAL והרבה מאוד EVAL... כל HOOK שם זה קוד שיוצר על ידי EVAL.
אבל רק בעל האתר יכול לערוך את הקוד הזה...